/**
 * http配置
 */
import axios from "axios";
import Vue from "vue";
// import qs from "qs";

const Axios = axios.create({
  // baseURL: "https://api.xxxxxx.com", // 设置统一基础的url,线上环境关闭代理使用它
  // proxy: true,           // 开启代理 一般不需要开启
  // prefix:'/mock',     // 请求的url前缀 例如: /api   一般不需要开启
  timeout: 10000,      // api超时时间
  responseType: "json",
  withCredentials: true, // 是否允许带cookie这些
  headers: {
    //   "Content-Type": "application/x-www-form-urlencoded;charset=utf-8"
    "Content-Type": "application/json;charset=utf-8"
  }
});

//POST传参序列化(添加请求拦截器)
Axios.interceptors.request.use(
  config => {
    // 在发送请求之前做某件事
    if (config.method === "post") {
      // 序列化
      // config.data = qs.stringify(config.data);
      //   config.data = JSON.stringify(config.data);
      // 温馨提示,若是贵能直接接受json 格式,可以不用 qs 来序列化的
    }

    // 若是有做鉴权token , 就给头部带上token
    // 若是需要跨站点,存放到 cookie 会好一点,限制也没那么多,有些浏览环境限制了 localstorage 的使用
    // if (localStorage.token) {
    //   config.headers.Authorization = localStorage.token;
    // }
    return config;
  },
  error => {
    // error 的回调信息,看贵公司的定义
    // Message({
    //   showClose: true,
    //   message: error,
    //   type: "warning"
    // });
    return Promise.reject(error);
  }
);

//返回状态判断(添加响应拦截器)
Axios.interceptors.response.use(
  res => {
    //对响应数据做些事
    // if (res.data && !res.data.success) {
    //   return Promise.reject(res.data.error);
    // }
    return res;
  },
  error => {
    // console.log(error);
    if (error.data) {
      switch (error.data.code) {
        case 401:
          // 返回 401 
          break;

      }
    }
    return Promise.reject(error);
  }
);

//  axios 配合 await
const api = {
  async get(url, data) {
    try {
      let res = await Axios.get(url, {
        params: data
      })
      res = res.data
      return new Promise((resolve) => {
        if (res.code === 0) {
          resolve(res)
        } else {
          resolve(res)
        }
      })
    } catch (err) {
      console.log(err)
    }
  },
  async post(url, data) {
    try {
      let res = await Axios.post(url, qs.stringify(data))
      res = res.data
      return new Promise((resolve, reject) => {
        if (res.code === 0) {
          resolve(res)
        } else {
          reject(res)
        }
      })
    } catch (err) {
      console.log(err)
    }
  }
}

Vue.prototype.$http = Axios;
Vue.prototype.$api = api;
